package com.swh.zuul.filters.pre;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;

/**
 * 简单的请求过滤器(pre),此类中的filterType会在启动过程中加载
 *  pre:在 请求被路由 之前执行过滤
 *	routing:实际请求路由的时候进行过滤
 *	post:请求路由之后 进行过滤
 *	error:请求路由 出现异常 的时候 执行
 *
 * @author sangwenhao-桑文豪
 * @date 2016年12月30日 下午11:19:37
 */
public class SimplerFilter extends ZuulFilter{
	
	private static final Logger logger = LoggerFactory.getLogger(SimplerFilter.class);

	/**
	 * 执行过滤内容
	 * @see com.netflix.zuul.IZuulFilter#run()
	 * @author sangwenhao-桑文豪
	 * @date 2016年12月31日 上午12:01:47
	 */
	@Override
	public Object run() {
		//zuul的请求和状态信息都在RequestContext中，
		//通过RequestContext和可以获取请求HttpServletRequest等信息
		RequestContext requestContext = RequestContext.getCurrentContext();
		HttpServletRequest request = requestContext.getRequest();
		logger.info(String.format("SimplerFilter %s request to %s", request.getMethod(), request.getRequestURL().toString()));
		
		logger.info("SimplerFilter 执行了pre >>> run方法");
		//查看令牌token
//		String token = request.getHeader("token");
//        if(StringUtils.isEmpty(token)){
//            requestContext.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
//            requestContext.setSendZuulResponse(false);
//            throw new RuntimeException("UNAUTHORIZED");
//        }
		
		return null;
	}
	
	/**
	 * 在这个方法里写代码逻辑何时执行这个过滤器(这个方法将总是被执行)。
	 * @see com.netflix.zuul.IZuulFilter#shouldFilter()
	 * @author sangwenhao-桑文豪
	 * @date 2016年12月30日 下午11:59:44
	 */
	@Override
	public boolean shouldFilter() {
		logger.info("SimplerFilter >>>>>>>>>>>>> 进入pre >>> shouldFilter...");
		return true;
	}

	/**
	 * 相对于其他过滤器，该过滤器的执行顺序
	 * @see com.netflix.zuul.ZuulFilter#filterOrder()
	 * @author sangwenhao-桑文豪
	 * @date 2016年12月30日 下午11:56:42
	 */
	@Override
	public int filterOrder() {
		logger.info("SimplerFilter>>>>>>>>>>>>> 进入pre >>> filterOrder...");
		return 1;
	}

	/**
	 * 返回该过滤器要执行过滤的阶段
	 * @see com.netflix.zuul.ZuulFilter#filterType()
	 * @author sangwenhao-桑文豪
	 * @date 2016年12月30日 下午11:57:01
	 */
	@Override
	public String filterType() {
		logger.info("SimplerFilter >>>>>>>>>>>>> 进入pre >>> filterType...");
		return "post";
	}

}
